C2E에 멀티 기능 가능할까요?
페이지 정보
작성자 감사합니다 댓글 8건 조회 3,872회 작성일 24-02-28 18:26본문
한가지 부탁드리고 싶은게 있어서 이렇게 글을 씁니다
사용 캐드 : 지스타캐드 2024ST
C2E 기능을 멀티로 되게 하면 좋을거 같아서 문의 드립니다.
폴더를 선택하면 폴더 내의 파일의 선택 부분들을 자동으로 엑셀에 입력해주는 기능입니다
첫번째 파일의 선택 1번을 드래그로 선택하고 선택 2번을 드래그로 선택하면 첨부드린 엑셀과 같이 입력이 되고
두번째 파일의 같은 위치의 문자가 엑셀의 다음칸에 똑같은 방식으로 입력되게 하면 좋을거 같습니다
바쁘시고 고단하시겠지만 시간 나실때 한번 검토 부탁드립니다. 감사합니다
첨부파일
- TEST.dwg (131.6K) 0회 다운로드 | DATE : 2024-02-28 18:26:49
- TEST 결과.xlsx (8.8K) 2회 다운로드 | DATE : 2024-02-28 18:26:49
- 이전글LK,LU,LL 객체 선택시 여러객체 선택 및 마우스 드래그로 선택 추가 요청 드립니다. 24.03.12
- 다음글자기자리 블록 xyz스케일에 대해 24.02.27
댓글목록
이자더님의 댓글
이자더 작성일
안녕하세요.
다른 분의 요청이 있어서 검토한 적이 있는데.. 여러 파일 작동을 위해서 파일을 오픈하면 엑셀과의 연결이 끊어져 버리더라고요.
캐드 자체의 특성이라서 불행히도 제가 할 수 있는 것은 없었습니다.
이자더님의 댓글
이자더 작성일
이렇게는 시도해 볼 수 있을 것 같아요..
MDL 에서, 문자를 합치지 않고..
지금 처럼 영역1, 영역2 를 잡으면.. 해당 영역안의 문자를 다 모아서.. 하나의 표로 만들어 주는....
그렇게 모인 표를 엑셀로 한꺼번에 넘기는 것은 가능할 것 같아요.
시간이 걸리겠지만....
감사합니다님의 댓글
감사합니다 작성일넵 시도 해보겠습니다 감사합니다
이자더님의 댓글
이자더 작성일아.. 그게 아니라.. MDL 에 제가 기능을 추가하면 가능할 것 같다는 의미였습니다.
감사합니다님의 댓글
감사합니다 작성일
예전에 이키모아에서 수정 부탁드렸던 파일인데요 이제 보니 이자더님께서 수정해 주신거 같네요 ㅎ
이건 오토캐드에서 쓰던건데 혹시 이걸 수정하는 방법은 없을까 해서 올려 봅니다
;;;----------------------------------------------------------------------------;
;; 폴더 내의 파일안에 있는 일정 영역 속의 글자를 읽어서 엑셀로 보내기
;; 원작자 : 모름
;; 수정 : 2016-03-20, 이자더, 가로도곽과 세로도곽의 정렬분리
;; 수정 : 2017-05-16, 청소대장군, mtext->excel 추가
;;;----------------------------------------------------------------------------;
(defun c:xx ( / cdwgfilelist cdwglist cfolder col ctr ds dwgfile filter_code
filter_value horp index lst newsset obj odocument odocuments
olst opendwglist row ssets str tlst txlst
;;;지역함수
browseforfolder
init-excel
write-row-column
)
;;;----------------------------------------------------------------------------;
(defun BrowseforFolder (msg flag folder / oShell oFolder cFolder)
(setq oShell
(vla-getinterfaceobject
(vlax-get-acad-object)
"Shell.Application"
)
)
(if (setq oFolder
(vlax-invoke-method
oShell
'browseforfolder
0
msg
flag
folder
)
)
(setq cFolder (vlax-get (vlax-get oFolder "self") "path"))
)
(vlax-release-object oShell)
cFolder
)
;;;----------------------------------------------------------------------------;
(defun init-excel (/ excel-app wb-collection workbook sheets sheet1)
(setq excel-app (vlax-get-or-create-object "excel.application"))
(setq wb-collection (vlax-get excel-app "workbooks"))
(setq workbook (vlax-invoke-method wb-collection "add"))
(setq sheets (vlax-get workbook "sheets"))
(setq sheet1 (vlax-get-property sheets "item" 1))
(setq *excel-cells* (vlax-get sheet1 "cells"))
(vlax-put excel-app "visible" 1)
)
;;;----------------------------------------------------------------------------;
(defun write-row-column (row col x)
(vlax-put-property
*excel-cells*
"item"
row
col
(vl-princ-to-string x)
)
)
;;;----------------------------------------------------------------------------;
(defun LM:UnFormat ( str mtx / _Replace regex ) (vl-load-com)
;; ⓒ Lee Mac 2010
(defun _Replace ( new old str )
(vlax-put-property regex 'pattern old) (vlax-invoke regex 'replace str new)
)
(setq regex (vlax-get-or-create-object "VBScript.RegExp"))
(mapcar
(function
(lambda ( x ) (vlax-put-property regex (car x) (cdr x)))
)
(list (cons 'global actrue) (cons 'ignorecase acfalse) (cons 'multiline actrue))
)
(mapcar
(function
(lambda ( x ) (setq str (_Replace (car x) (cdr x) str)))
)
'(
("Ð" . "\\\\\\\\")
(" " . "\\\\P|\\n|\\t")
("$1" . "\\\\(\\\\[ACcFfHLlOopQTW])|\\\\[ACcFfHLlOopQTW][^\\\\;]*;|\\\\[ACcFfHLlOopQTW]")
("$1$2/$3" . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
("$1$2" . "\\\\(\\\\S)|[\\\\](})|}")
("$1" . "[\\\\]({)|{")
)
)
(setq str
(if mtx
(_Replace "\\\\" "Ð" (_Replace "\\$1$2$3" "(\\\\[ACcFfHLlOoPpQSTW])|({)|(})" str))
(_Replace "\\" "Ð" str)
)
)
(vlax-release-object regex)
str
)
;;;----------------------------------------------------------------------------;
(vl-load-com)
(if (setq cFolder
(BrowseforFolder "도면이 들어있는 폴더를 선택하세요..."
(+ 256 512)
oldfolder
)
)
(progn
(setq cDwgList (vl-directory-files cFolder "*.dwg"))
(if (/= (substr cFolder (strlen cFolder)) "\\")
(setq cDwgFileList
(mapcar '(lambda (x) (strcat cFolder "\\" x))
cDwgList
)
)
(setq cDwgFileList
(mapcar '(lambda (x) (strcat cFolder x))
cDwgList
)
)
)
(setq oDocuments (vla-get-documents (vlax-get-acad-object)))
(setq openDwgList nil)
(vlax-for TmpDwg oDocuments
(setq openDwgList (cons (vla-get-name TmpDwg) openDwgList))
)
(setq Index 0)
(repeat (length cDwgFileList)
(setq DwgFile (nth Index cDwgFileList))
(setq oDocument (vla-open oDocuments DwgFile))
(setq ds
(vlax-variant-value
(vla-getvariable
oDocument
"DimScale"
)
)
)
(setq ssets nil
ssets (vla-get-selectionsets oDocument)
)
(setq newsset (vla-add ssets "ss1"))
(setq filter_code (vlax-make-safearray vlax-vbinteger '(0 . 0)))
(setq filter_value
(vlax-make-safearray
vlax-vbvariant
'(0 . 0))
)
(vlax-safearray-fill filter_code '(0))
(vlax-safearray-fill filter_value '("*TEXT"))
(vla-select
newsset
acSelectionSetAll
nil
nil
filter_code
filter_value
)
(setq ctr 0
olst '()
)
(repeat (vla-get-count newsset)
(setq obj (vla-item newsset ctr))
(setq olst (append olst (list obj)))
(setq ctr (1+ ctr))
)
(setq olst
(vl-remove-if-not
'(lambda (x / str pnt)
(setq str (vlax-get x 'textString)
pnt (vlax-get x 'InsertionPoint)
)
(if
(or
(and
(/= str "")
(< (* ds 220)(car pnt)(* ds 410))
(< (* ds 277.4)(cadr pnt)(* ds 282.2))
)
(and
(/= str "")
(< (* ds 354)(car pnt)(* ds 410))
(< (* ds 10)(cadr pnt)(* ds 19.6))
)
)
(setq lst (append lst (list str)))
)
)
olst
)
)
(setq tlst
(vl-sort olst
'(lambda (a b)
(if
(equal
(cadr (vlax-get a 'InsertionPoint))
(cadr (vlax-get b 'InsertionPoint))
(* ds 1.)
)
(< (car (vlax-get a 'InsertionPoint))
(car (vlax-get b 'InsertionPoint))
)
(< (cadr (vlax-get a 'InsertionPoint))
(cadr (vlax-get b 'InsertionPoint))
)
)
)
)
)
(setq lst '())
(foreach x tlst
;(setq str (vlax-get x 'textString)
(setq str (LM:UnFormat (vlax-get x 'textString) nil)
lst (append lst (list str))
)
)
(setq txlst (append txlst lst))
(vla-close oDocument)
(setq Index (1+ Index)
horp nil
)
)
(init-excel)
(setq row 1
col 1
)
(foreach txt txlst
(write-row-column row col txt)
(if (= 10 col);;; 몇개 입력 후 아랫줄로 변경할 것인가
(progn
(setq row (1+ row)
col 1
)
)
(setq col (1+ col))
)
)
)
)
(princ)
)
이자더님의 댓글
이자더 작성일
지금도 TTT 명령어로 가능은 해요..
다만 그 것이 입맛에 맞게 조금은 수정이 되어야 할 것 같습니다.
감사합니다님의 댓글
감사합니다 작성일
TTT도 일일이 옮기는 것보다는 훨씬 편하네요 ㅎ 이걸로 표 만들고 엑셀로 옮겨서 편집해야 겠네요
신경 써주셔서 감사합니다~^^
이자더님의 댓글
이자더 작성일
v4.70
TTT 에 반영